//
// Copyright 2018 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
syntax = "proto3";

// Package gnmi_ext defines a set of extensions messages which can be optionally
// included with the request and response messages of gNMI RPCs. A set of
// well-known extensions are defined within this file, along with a registry for
// extensions defined outside of this package.
package gnmi_ext;

// The Extension message contains a single gNMI extension.
message Extension {
  oneof ext {
    RegisteredExtension registered_ext = 1; // A registered extension.
    // Well known extensions are to be added directly within the ext oneof.
  }
}

// The RegisteredExtension message defines an extension which is defined outside
// of this file.
message RegisteredExtension {
  ExtensionID id = 1; // The unique ID assigned to this extension.
  bytes msg = 2;      // The binary-marshalled protobuf extension payload.
}

// RegisteredExtension is an enumeration acting as a registry for extensions
// defined by external sources.
enum ExtensionID {
  EID_UNSET = 0;
  // New extensions are to be defined within this enumeration - their definition
  // MUST link to a reference describing their implementation.

  // An experimental extension that may be used during prototyping of a new
  // extension.
  EID_EXPERIMENTAL = 999;
}


